草庐IT

Android Explicit Intent 抛出 NoClassDefFounderror

全部标签

c++ - 如何让 STL 抛出异常而不是断言?

我必须为一些写得不好的C++代码编写测试。问题是代码在许多情况下会导致STL断言/调试中断(通常是由愚蠢的错误引起的,例如超出字符串/vector范围的访问),这会导致测试终止。是否有可能使STL抛出异常(可以被捕获)而不只是崩溃?我必须将对原始代码的更改保持在绝对最低限度。感谢帮助 最佳答案 这绝对取决于您使用的STL。也就是说,这可能根本不可能。该标准定义了许多保证(尤其是C++0x的保证),并且函数是否抛出是这些保证的一部分。例如std::vector::operator[]不会扔。话虽这么说,可能会有很多技巧(用于调试的特定

c# - Protobuf-net(反)小数序列化在使用自定义小数原型(prototype)合约(C#/C++ 互操作)时抛出

假设我想序列化,然后使用protobuf-net反序列化一个小数:constdecimaloriginalDecimal=1.6641007661819458m;using(varmemoryStream=newMemoryStream()){Serializer.Serialize(memoryStream,originalDecimal);memoryStream.Position=0;vardeserializedDecimal=Serializer.Deserialize(memoryStream);Assert.AreEqual(originalDecimal,deseria

c++ - 我如何猜测所有可能在 C++ 中抛出的异常?

我包含了一个第三方头文件。它具有可能/可能不会抛出异常的功能。在我的源代码中,我如何确定可能从该文件中抛出哪些异常?这是一道面试题。我的答复是检查函数声明并查找异常规范。这可以给我们一些提示。有没有其他方法可以预测可能抛出的异常? 最佳答案 这有几个方面:如果为一个函数声明了异常,那么只有那些(当然还有派生类)可能会被抛出,所有其他的都会导致程序终止。即使为函数声明了异常,也不是每个编译器都实际执行此规则。如果没有为函数声明异常(不是空的异常集!),则可能会抛出任何异常。合理的代码永远不会抛出不是派生自std::exception的

c++ - 数组越界时抛出异常

我有一个矩阵类,它使用[][]来访问元素。当一个(或两个)索引超出范围时,我必须抛出CIndexException。这是一个以“无效索引[a][b]”格式存储文本的类,其中a和b是数字。这是我当前对CIndexException类的实现classCIndexException{stringtext;public:CIndexException(inta,intb){ostringstreamoss;oss矩阵表示为double的二维数组,它在构造函数中初始化:CMatrix(intr,intc){colls=c;rows=r;mat=newdouble*[rows];for(inti=

C++ 类构造函数抛出异常

让我们考虑拥有一个类,其中包含一个构造函数并抛出一个异常如下所示:classClass{public:Class(typeargument){if(argument==NULL){throwstd::exception("Valuecannotbenull.\nParametername:argument");}//Instructions}private://Properties}因为classconstructor可能会抛出一个exception我们不能直接声明一个对象。Classobj(argument);//Harmful这意味着必须调用构造函数必须使用try/catchtry

c++ - 是否可以抛出 C++ 标准库中定义的异常?

我想知道是否可以抛出C++标准库中定义的异常,而不是创建我自己的类。例如,让我们考虑以下将一个字符串作为参数的(愚蠢的)函数:#include#include#includebooluseless_function(conststd::string&str){if(str=="true")returntrue;elseif(str=="false")returnfalse;elsethrowstd::invalid_argument("Expectedargumentofeithertrueorfalse");}当然,我们可以这样做:intmain(intargc,constchar*

c++ - 链接到 MFC 项目的没有 mfc 的 C++ 静态库是否抛出 bad_alloc 或 CMemoryException*?

我正在为MFC应用程序开发一个大型、老化的代码库。随着时间的推移,该代码已被许多开发人员处理,因此,我们在整个代码中采用三种不同的方式来处理new分配失败的可能性。第一种方法是在new的结果上测试NULL。我们不使用nothrownew.obj,所以这显然是一个需要清除的错误。第二个是捕获CMemoryException*(是的,编译器中启用了C++异常)。据我了解,MFC覆盖了标准的operatornew,而是抛出了这个东西。我相当确定这第二种方法在MFC应用程序本身中是正确的。MFC使用其奇怪的CMemoryException抛出版本覆盖新的。最后一个来self们的基础人员,他们精

来自函数的 c++ stacktrace 抛出异常?

我可以利用gcc的回溯在程序的任何给定点获取堆栈跟踪,但我想从抛出异常时堆栈所在的任何帧获取跟踪,即在堆栈展开。例如,下面的blockfunc(){throwstd::exception();}try{func();}catch(std::exception){std::cout应该仍然能够以某种方式保留func()的框架。这是askedbefore,但它涉及一个未处理的异常,该异常会终止程序并且可能没有给调用堆栈一个放松的机会?有没有办法做到这一点,同时仍然能够正常捕获和处理异常?可能有一种方法,比如为所有异常设置一个处理程序,它除了生成跟踪并重新抛出异常外什么都不做。理想情况下,我

c++ - 是否允许标准迭代器操作抛出?

考虑一个标准的迭代器,它需要为遍历数据结构分配内存。如果无法分配内存,标准是否允许迭代器抛出异常?例如,考虑树数据结构的输入迭代器。在这种情况下,要遍历树,您必须添加并维护指向每个节点父节点的指针(这会减慢不需要此类指针的操作,例如在树上插入/删除/查找)或使用堆栈帮助迭代器存储指向遍历节点的指针。在这种情况下,在推进堆栈的同时,堆栈可能会增长,直到没有更多的可用内存并且迭代器被迫抛出。 最佳答案 是的,允许C++中的迭代器方法抛出异常,正如您所指出的,在某些情况下可以抛出异常。C++中唯一不能抛出异常的函数是析构函数。实际上这只是

c++ - C++ streambuf 方法可以抛出异常吗?

我正在尝试找到一种方法来获取读取或写入流的字符数,即使出现错误并且读/写结束很短也是可靠的。我正在做这样的事情:returnstream.rdbuf()->sputn(buffer,buffer_size);但是如果允许overflow的streambuf实现抛出异常,这将不起作用。是吗?我无法在任何地方找到它的记录。 最佳答案 basic_streambuf::overflow允许在失败时抛出异常,如27.6.3.4.5/6中所述,遗憾的是没有办法确保编译时该函数永远不会抛出异常。看来您的运气已经不多了,要100%确定overfl